package Template1;

/**
 * 模板设计模式用于做权限控制的例子
 * 优点：
 * 1.封装 2.复用 3.屏蔽 4.维护方便
 * 缺点：
 * java里继承只能继承一个父类；
 */
public abstract class Template_main {
    /**
     * 父类中需要执行的一些必要的记录或者是判断/过滤
     * @param authority
     */
    public final void template_main(String authority){
        System.out.println("记录访问日志");
        if (authority.equals("pass")){
            method1();
            doService("s");
        }else {
            method2();
            doService2("s1");
        }

    }

    /**
     * 父类方法中间的某段代码不确定，留给子类干，就用模板方法设计模式。
     * @param s
     */
    protected  abstract  void doService(String s);

    protected abstract void doService2(String s);

    /**
     * 父类中确定要执行的一些代码
     */
    private  void method1() {
        System.out.println("权限通过...");
    }

    private void method2() {
        System.out.println("无权访问...");
    }

}

